/*
 * 代号：凤凰
 * http://www.jphenix.org
 * 2022年8月22日
 * V4.0
 */
package com.jphenix.standard.servlet.api;

import java.util.Enumeration;
import java.util.Map;

import com.jphenix.standard.docs.ClassInfo;

/**
 * 会话对象接口
 * 
 * 2022-09-04 隔离了ServletApi，兼容新老Tomcat
 * 
 * @author MBG
 * 2022年8月22日
 */
@ClassInfo({"2022-09-04 21:58","会话对象接口"})
public interface IHttpSession {
    
	/**
	 * 返回会话创建时间
	 * @return 会话创建时间（毫秒）
	 * 2022年8月22日
	 * @author MBG
	 */
    long getCreationTime();

    /**
     * 获取会话主键
     * @return
     * 2022年8月22日
     * @author MBG
     */
    String getId();

    /**
     * 返回上次访问时间（毫秒）
     * @return 上次访问时间（毫秒）
     * 2022年8月22日
     * @author MBG
     */
    long getLastAccessedTime();

    /**
     * 返回Servlet上下文
     * @return Servlet上下文
     * 2022年8月22日
     * @author MBG
     */
    IServletContext getServletContext();

    /**
     * 设置会话超时时间（秒）
     * @param interval 会话超时时间（秒）
     * 2022年8月22日
     * @author MBG
     */
    void setMaxInactiveInterval(int interval);

    /**
     * 获取会话超时时间（秒）
     * @return 会话超时时间（秒）
     * 2022年8月22日
     * @author MBG
     */
    int getMaxInactiveInterval();

    /**
     * 返回会话属性值
     * @param name 属性名
     * @return     属性值
     * 2022年8月22日
     * @author MBG
     */
    Object getAttribute(String name);

    /**
     * 返回所有属性名枚举
     * @return 所有属性名枚举
     * 2022年8月22日
     * @author MBG
     */
    public Enumeration<String> getAttributeNames();

    /**
     * 设置属性值
     * @param name   属性名
     * @param value  属性值
     * 2022年8月24日
     * @author MBG
     */
    public void setAttribute(String name, Object value);

    /**
     * 移除指定属性值
     * @param name 属性名
     * 2022年8月24日
     * @author MBG
     */
    public void removeAttribute(String name);

    /**
     * 使会话无效
     * 2022年8月24日
     * @author MBG
     */
    public void invalidate();

    /**
     * 是否为刚创建的会话（还没发送到客户端）
     * @return 是否为刚创建的会话）
     * 2022年8月24日
     * @author MBG
     */
    public boolean isNew();
    
	/**
	 * 获取属性容器
	 * @author 刘虻
	 * 2008-7-22下午06:07:01
	 * @return 属性容器
	 */
	Map<String,Object> getAttributeMap();
}
